package cn.jly.bigdata.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author lanyangji
 * @date 2019/11/22 22:31
 */
object WordCount {

  def main(args: Array[String]): Unit = {

    // local模式

    // 创建 SparkConf 对象
    // 这边也自定义了本地的模式（分配多少个cpu）
    // app id
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")

    // 创建spark上下文对象，SparkContext -> sc
    val sc = new SparkContext(sparkConf)

    // 读取文件,将文件内容一行一行读取出来
    // 路径查找位置默认从当前的部署环境中查找
    // 如果需要从本地查找，file://xxx
    val lines: RDD[String] = sc.textFile("input")

    // 将一行一行的数据分解成每个单词
    val words: RDD[String] = lines.flatMap(_.split(" "))

    // 为统计方便，将单词的结构进行转换
    val words2One: RDD[(String, Int)] = words.map((_, 1))

    // 对转换结构后的数据进行分组聚合
    val res1: RDD[(String, Int)] = words2One.reduceByKey(_ + _)

    // 结果采集
    val res: Array[(String, Int)] = res1.collect

    // 打印到控制台
    println(s"res = ${res.mkString(",")}")
  }
}
